﻿// 164. 可达性统计 进阶指南.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <set>
#include <queue>
#include <bitset>

using namespace std;


/*

https://www.acwing.com/problem/content/166/
给定一张 N 个点 M 条边的有向无环图，分别统计从每个点出发能够到达的点的数量。

输入格式
第一行两个整数 N,M，接下来 M 行每行两个整数 x,y，表示从 x 到 y 的一条有向边。

输出格式
输出共 N 行，表示每个点能够到达的点的数量。

数据范围
1≤N,M≤30000
输入样例：
10 10
3 8
2 3
2 5
5 9
5 9
2 3
3 9
4 8
2 10
4 9
输出样例：
1
6
3
3
2
1
1
1
1
1
*/


const int N = 30010;
set<int> g[N];
int vis[N];
int n, m;
std::bitset<N> dp[N];

void dfs(int x) {
    if (vis[x] == 1) return;
    vis[x] = 1; dp[x].set(x);
    for (auto& e : g[x]) {
        if (vis[e] == 1) {
            dp[x] |= dp[e];
        }
        else {
            dfs(e);
            dp[x] |= dp[e];
        }
    }
}

void solve() {
    for (int i = 1; i <= n; i++) {
        if (vis[i] == 0) {
            dfs(i);
        }
    }

    for (int i = 1; i <= n; i++) {
        cout << dp[i].count() << endl;
    }
}
 

int main()
{
    cin >> n >> m;
    for (int i = 0; i < m; i++) {
        int a, b; cin >> a >> b;
        if (g[a].count(b) == 0) {
            g[a].insert(b);
        }
    }

    solve();
    
    return 0;
}

 